假設我們要在連線遊戲中讓玩家能夠操控一隻角色,使他能夠前後左右走動。
在客戶端中我們需要一個 "PlayerController" 的腳本,裡面會寫關於角色移動的方法,以及玩家的資料(id 、name等等),而我們也需要一個"PlayerManager" 的 Script 來管理、新增、刪除角色(玩家)。
我們還需要一個 "ClientSend" 的Script,來將我們客戶端的訊息傳送至伺服器端。
public static Dictionary<int, PlayerController> playerControllers = new Dictionary<int, PlayerController>();
public GameObject playerPrefab;
public void SpawnPlayer(int _id, string _username, Vector3 _position, Quaternion _rotation)
{
GameObject _player;
_player = Instantiate(playerPrefab, _position, _rotation);
_player.GetComponent<PlayerController>().Initialize(_id);
playerControllers.Add(_id, _player.GetComponent<PlayerController>());
}
public int id;
private void FixedUpdate()
{
SendInputToServer();
}
private void SendInputToServer()
{
bool[] _inputs = new bool[]
{
Input.GetKey(KeyCode.W), Input.GetKey(KeyCode.S), Input.GetKey(KeyCode.A), Input.GetKey(KeyCode.D),}; ClientSend.PlayerMovement(_inputs);
}
public static void PlayerMovement(bool[] _inputs)
{
using (Packet _packet = new Packet((int)ClientPackets.playerMovement))
{
_packet.Write(_inputs.Length);
foreach (bool _input in _inputs)
{
_packet.Write(_input);
}
_packet.Write(GameManager.players[Client.instance.myId].transform.rotation);
SendUDPData(_packet);
}
}